home *** CD-ROM | disk | FTP | other *** search
- MODULE SimpleCPX;
- (*
- * einfachstes CPX-Demo
- *
- * angelehnt an das Beispiel S. 721 ff. aus
- * Jankowski/Rabich/Reschke: ATARI Profibuch ST-STE-TT, Sybex
- *
- * Aus diesem Beispiel sollte ersichtlich sein, daß die C-Routine cpx_init()
- * in Modula-2 durch den gesamten Initialisierungsteil des Programms gebildet
- * wird. Die Rückgabe erfolgt durch die Routine CPX.Return().
- *
- * Ein komplexeres Beispiel findet sich mit SampleCPX in SAMPLE.M
- *)
-
- (*
- * (c) 10/1992 A. Alich, C. Sprenger
- *)
- IMPORT AES, CPX, evnt, objc;
- FROM SYSTEM IMPORT ADR, LONG;
-
- CONST
- nObs = 2;
-
- TYPE
- tObj = RECORD
- next, head, tail: SHORTINT;
- type: SHORTCARD;
- flags, state: BITSET;
- spec: LONG;
- rect: AES.tRect;
- END;
- tTree = ARRAY [0..nObs] OF tObj;
- tpTree = POINTER TO tTree;
-
- CONST
- cRsc = tTree{
- {
- -1, 1, 2,
- objc.Box, {}, {},
- LONG(1101H),
- {0, 0, 32, 11}
- },
- {
- 2, -1, -1,
- objc.String, {}, {},
- LONG(0),
- {6, 3, 8, 1}
- },
- {
- 0, -1, -1,
- objc.Button, {objc.LastObj, objc.Exit, objc.Default, objc.Selectable},
- {},
- LONG(0),
- {12, 9, 6, 1}
- }
- };
-
- VAR
- pTree: tpTree;
-
- (*$E+*)(*$K+*)
- PROCEDURE cpx_call (VAR work: AES.tRect): SHORTINT;
-
- VAR
- msg: evnt.tMsg;
-
- BEGIN
- WITH pTree^[0].rect DO
- x := work.x;
- y := work.y;
- END;
- objc.draw (pTree, 0, 8, work);
- VOID (CPX.pXCPB^.Xform_do (pTree, 0, msg));
- (*
- * Da bei jedem Aufruf des CPX dieses initialisiert wird, und dieses
- * via CPX.Return() beendet wird, muß die Terminierungskette vorher
- * "per Hand" aktiviert werden:
- *)
- CPX.Terminate;
- RETURN 0
- (*
- * Hier ist die CPX-Ausführung beendet.
- *)
- END cpx_call;
- (*$E=*)(*$K=*)
-
- VAR
- title: ARRAY [0..21] OF CHAR;
- ok: ARRAY [0..3] OF CHAR;
- i: SHORTINT;
-
- (*
- * Der Module-Body dient als cpx_init()-Funktion.
- *)
- BEGIN
- WITH CPX.pXCPB^ DO
- IF booting # 0 THEN
- CPX.Return (CPX.tpCpxInfo(1))
- END;
- pTree := ADR (cRsc);
- IF SkipRshFix = 0 THEN
- FOR i := 0 TO nObs DO
- rsh_obfix (pTree, i)
- END;
- END;
- title := 'Hänisch-Modula-2 CPX'; pTree^[1].spec := LONG(ADR (title));
- ok := 'OK'; pTree^[2].spec := LONG(ADR (ok));
- CPX.CpxInfo.cpx_call := cpx_call;
- (*
- * CPX.Return() bekommt den Rückgabewert von cpx_init() auf den Weg.
- *)
- CPX.Return (ADR (CPX.CpxInfo))
- (*
- * Hierher kommt das Programm NIE!
- *)
- END;
- END SimpleCPX.
-
-
-